#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

//长时间执行的线程
void *task(void *arg)
{
    printf("task线程开始执行\n");

    //模拟工作
    printf("task线程工作中...\n");
    sleep(3);

    printf("task线程sleep之后执行完毕\n");
    return NULL;
}

int main()
{
    printf("主线程开始执行\n");

    pthread_t pt;

    //创建线程
    pthread_create(&pt, NULL, task, NULL);

    //等待一段时间，让分线程先执行
    sleep(1);

    //取消分线程
    // pthread_cancel(pt);
    // printf("主线程取消分线程\n");

    //等待分线程执行完毕
    void *result;
    pthread_join(pt, &result);

    //检查分线程是否被取消
    if (result == PTHREAD_CANCELED)
    {
        printf("分线程被取消\n");
    }
    else
    {
        printf("分线程正常结束\n");
    }   

    printf("主线程执行完毕\n");
    return 0;
}